const jwt = require('jsonwebtoken');

module.exports = (req, res, next) => {
    try {
        const authHeader = req.headers.authorization;

        if (!authHeader) {
            return res.status(401).json({
                success: false,
                msg: '未提供认证令牌'
            });
        }

        // 检查token格式
        const parts = authHeader.split(' ');
        if (parts.length !== 2 || parts[0] !== 'Bearer') {
            return res.status(401).json({
                success: false,
                msg: '认证令牌格式错误'
            });
        }

        const token = parts[1];

        try {
            const decoded = jwt.verify(token, process.env.JWT_SECRET);
            req.user = decoded;
            next();
        } catch (err) {
            if (err.name === 'TokenExpiredError') {
                return res.status(401).json({
                    success: false,
                    msg: '认证令牌已过期'
                });
            }
            if (err.name === 'JsonWebTokenError') {
                return res.status(401).json({
                    success: false,
                    msg: '无效的认证令牌'
                });
            }
            throw err;
        }
    } catch (error) {
        console.error('认证错误:', error);
        res.status(500).json({
            success: false,
            msg: '认证过程发生错误',
            error: process.env.NODE_ENV === 'development' ? error.message : undefined
        });
    }
};